package ec.edu.ups.relevo.vista.servlet;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStreamReader;
import java.io.Reader;
import java.util.Calendar;
import java.util.Date;
import java.util.Random;
import java.util.UUID;

import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import ec.edu.ups.relevo.utils.ParametrosApp;
import sun.misc.BASE64Decoder;

public class ImageServlet extends HttpServlet
{
	private static final long serialVersionUID = 1L;

	@Override
	public void doPost(HttpServletRequest request, HttpServletResponse response)
	{
		try
		{
			StringBuffer buffer = new StringBuffer();
			Reader reader = request.getReader();
			int current;
			while((current = reader.read()) >= 0)
				buffer.append((char) current);
			
			String data = new String(buffer);
			String []imgs=data.split("\\*;\\*");
			System.out.println("TOTAL DE FOTOGRAMAS:"+(imgs.length));
			String folderVid="";
			
			String codigoArchivo=UUID.randomUUID().toString();
			request.getSession().putValue("codigoVideo",codigoArchivo);
			
			if(imgs.length>1)//si sube mas de una imagen se crea una carpeta para los fotogramas
			{
				folderVid=ParametrosApp.PATH_RESOURCES+File.separator+"imagenes_subidas"+File.separator+codigoArchivo+"/";
				new File(folderVid).mkdir();
				Hilo h=new Hilo(folderVid,imgs,codigoArchivo);
				Thread hilo=new Thread (h); 
				hilo.start();
			}
			else//si sube solo una imagen se guarda solo la imagen
			{
				folderVid=ParametrosApp.PATH_RESOURCES+File.separator+"imagenes_subidas"+File.separator+codigoArchivo;
				for(int i=0;i<imgs.length;i++)
				{
					
						data=imgs[i];
						data = data.substring(data.indexOf(",") + 1);
						System.out.println(i+"/"+imgs.length+" Dados em Base64 da imagem PNG: " + data);
						FileOutputStream output = new FileOutputStream(new File(folderVid+i+ ".jpg"));
						output.write(new BASE64Decoder().decodeBuffer(data));
						output.flush();
						output.close();
				}
			}	
			
						
		}
		catch (Exception e)
		{
			e.printStackTrace();
		}
	}

	public void generarVideo() 
	{
		
		
		
		
		
					
	}
	public class Hilo implements Runnable
	{
		String folderVid;
		String []imgs;
		String codigoArchivo;
		public Hilo(String folderVid,String []imgs,String codigoArchivo)
		{
			this.folderVid=folderVid;
			this.imgs=imgs;
			this.codigoArchivo=codigoArchivo;
		}
		
		@Override
		public void run() 
		{
			try{
				for(int i=0;i<imgs.length;i++)
				{
					
						String data=imgs[i];
						data = data.substring(data.indexOf(",") + 1);
						System.out.println(i+"/"+imgs.length+" Dados em Base64 da imagem PNG: " + data);
						FileOutputStream output = new FileOutputStream(new File(folderVid+i+ ".jpg"));
						output.write(new BASE64Decoder().decodeBuffer(data));
						output.flush();
						output.close();
				}
	
				//String command="cd "+ParametrosApp.PATH_RESOURCES+ " && java -jar video.jar"+"  "+folderVid+" "+folderVid+"video.mov";
				
				String command="java -jar video.jar"+"  "+folderVid+" "+codigoArchivo+".mov";
				System.out.println(command);
				//
				try{
				ProcessBuilder builder = new ProcessBuilder("cmd.exe","/c",command);
				builder.redirectErrorStream(true);
				builder.directory(new File(ParametrosApp.PATH_RESOURCES));
				Process p = builder.start();
				BufferedReader r = new BufferedReader(new InputStreamReader(p.getInputStream()));
		        String line;
		        while (true) {
		            line = r.readLine();
		            if (line == null) { break; }
		            System.out.println(line);
		        }
				}catch(Exception e){e.printStackTrace();}
				System.out.println("Proceso conversion video terminado...");
				
			}catch(Exception ex)
			{
				ex.printStackTrace();
								
			}
		}

		
	}
}




